/*
 * Created on 24/06/2005
 *
 */
package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;

public class Calcula_Frete_Rodov02
    extends Calcula_Frete {

  public Calcula_Frete_Rodov02 (ExecutaSQL executasql) {
    super (executasql);
    // // //  ("calculaFreteRodov02 ***");
  }

  double vl_frete_total = 0;
  double vl_Frete_Peso = 0;
  double vl_Frete_Valor = 0;
  double vl_Descontar_Pedagio = 0;

  public void calcula (Calcula_FreteED ed) throws Excecoes {

    // // //  ("calculaFreteRodov02 VL_Nota_Fiscal=" + ed.getVL_Nota_Fiscal_Calculo ());

    Localiza_Tabela = new Localiza_Tabela (this.executasql);

    Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean ();

    NR_Prazo_Entrega = new Long (tabelaFreteED.getNR_Prazo_Entrega ()).intValue ();
    // // //  ("calculaFreteRodov02 VOLTA NR_Prazo_Entrega=" + NR_Prazo_Entrega);

    ed.setLocalizado ("N");
    ed.setDM_Tem_Peso ("S");
    ed.setDM_Tem_Modal ("S");
    ed.setDM_Tem_Validade ("N");
    ed.setDM_Tem_Vigencia ("N");
    ed.setDM_Tem_Empresa ("N");
    ed.setDM_Tem_Regiao_Estado ("S");
    ed.setDM_Tem_Estado ("S");
    ed.setDM_Tem_Subregiao ("S");
    ed.setDM_Tem_Regiao_Pais ("N");
    ed.setDM_Tem_Pais ("S");
    ed.setDM_Tabela_Reversa ("N");
    ed.setDM_Tem_Tabela_Unidade ("S");
    ed.setDM_Tem_Cidade ("S");
    ed.setDM_Tem_Produto ("S");

    if ("2".equals (ed.getDM_Tipo_Conhecimento ())) {
      this.calculaFreteCortesia (tabelaFreteED , ed);

    }
    else {
      ed.setDM_Percurso_Busca ("Origem_Destino");
      if ("3".equals (ed.getDM_Tipo_Conhecimento ())) {
        ed.setDM_Percurso_Busca ("Destino_Origem");
      }

      // // //  ("Localiza_Tabela 1 ");

      tabelaFreteED = Localiza_Tabela.escolheTabela (ed);

      if ("S".equals (tabelaFreteED.getDM_Localizado ())) {
        vl_frete_total = 0;

        this.calculaPedagio (tabelaFreteED , ed);
        this.calculaFretePeso (tabelaFreteED , ed);
        this.calculaFreteValor (tabelaFreteED , ed);

        //cliente imdepa KIELING pegar maior entre frete peso e fr valor
        if ("88613922".equals (ed.getOID_Pessoa_Pagador ().substring (0 , 8))) {
          try {
            String excluir_Tipo_Mov = "";
            if (vl_Frete_Peso >= vl_Frete_Valor && vl_Frete_Valor > 0) {
              excluir_Tipo_Mov = "AV";
            }
            if (vl_Frete_Valor > vl_Frete_Peso && vl_Frete_Peso > 0) {
              excluir_Tipo_Mov = "FP";
            }
            if (!"".equals (excluir_Tipo_Mov)) {
              sql = " DELETE FROM  Movimentos_Conhecimentos " +
                  " WHERE  Movimentos_Conhecimentos.oid_Movimento_Conhecimento in (" +
                  " SELECT oid_Movimento_Conhecimento FROM  Movimentos_Conhecimentos, Tipos_Movimentos " +
                  " WHERE  Movimentos_Conhecimentos.oid_Tipo_Movimento = Tipos_Movimentos.oid_Tipo_Movimento " +
                  " AND    Tipos_Movimentos.CD_Tipo_Movimento='" + excluir_Tipo_Mov + "'" +
                  " AND    OID_Conhecimento =  '" + ed.getOID_Conhecimento () + "')";
              executasql.executarUpdate (sql);
            }
          }
          catch (SQLException exc) {
            throw new Excecoes (exc.getMessage () , exc , getClass ().getName () , "calculaICMS");
          }
        }

        this.calculaCargaExpressa (tabelaFreteED , ed);
        this.calculaAdemeGris (tabelaFreteED , ed);
        this.calculaTaxas (tabelaFreteED , ed);
        this.calculaDespacho (tabelaFreteED , ed);
        this.calculaSecCat (tabelaFreteED , ed);
        this.calculaReembolso (tabelaFreteED , ed);
        this.calculaAdicionalICMS (tabelaFreteED , ed);
        this.calculaFreteMinimo (tabelaFreteED , ed);

        // // //  ("calculou tudo ");

      }
    }
  }

  protected void calculaFretePeso (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    try {
      // --------------------FRETE PESO--------------------------------------------------
      Tipo_Movimento = "FP";
      VL_Movimento_Frete = 0;
      // // //  ("getDM_Tipo_Peso->>" + tabelaFreteED.getDM_Tipo_Peso () + " ->> " + ed.getNR_Peso_Tabela ());

      if (ed.getDM_Tipo_Conhecimento ().equals ("9")) {
        sql = " SELECT VL_Total_Frete, NR_Peso, VL_Mercadoria, QT_Volumes FROM Coletas ";
        sql += " WHERE Coletas.oid_Coleta = " + ed.getOID_Coleta ();

        rs = null;
        rs = this.executasql.executarConsulta (sql);
        while (rs.next ()) {
          VL_Movimento_Frete = (rs.getDouble ("VL_Total_Frete") / rs.getDouble ("NR_Peso")) * ed.getNR_Peso_Tabela ();
          // VL_Movimento_Frete=(rs.getDouble("VL_Total_Frete")/rs.getDouble("QT_Volumes"))*NR_Volumes_NF;
        }
      }
      else {
        VL_Movimento_Frete = tabelaFreteED.getVL_Frete ();
        // // //  ("1->" + VL_Movimento_Frete);
        // // //  ("getNR_Peso_Minimo->" + tabelaFreteED.getNR_Peso_Minimo ());
        // // //  ("ed.getNR_Peso ()->" + ed.getNR_Peso ());
        // // //  ("ed.getNR_Peso_Cubado ()->" + ed.getNR_Peso_Cubado ());
        // // //  ("ed.getNR_Cubagem_Total ()->" + ed.getNR_Cubagem_Total ());
        // // //  ("ed.getNR_Cubagem->" + ed.getNR_Cubagem ());

        double nr_peso_calc = ed.getNR_Peso_Tabela ();

        //if (tabelaFreteED.getNR_Peso_Minimo () > 0) {
        //  if (ed.getNR_Peso_Cubado () > ed.getNR_Peso ()) {
        //    nr_peso_calc = ed.getNR_Peso_Cubado () - tabelaFreteED.getNR_Peso_Minimo ();
        //  }
        //  else {
        //    nr_peso_calc = ed.getNR_Peso () - tabelaFreteED.getNR_Peso_Minimo ();
        //  }
        //  if (nr_peso_calc < 0) {
        //    nr_peso_calc = 0;
        //  }
        //}

        if (tabelaFreteED.getNR_Peso_Minimo () > ed.getNR_Peso_Tabela()) {
            nr_peso_calc = tabelaFreteED.getNR_Peso_Minimo ();
        }


        // // //  ("nr_peso_calc->" + nr_peso_calc);

        if (tabelaFreteED.getDM_Tipo_Peso ().equals ("K")) {
          VL_Movimento_Frete = (tabelaFreteED.getVL_Frete () * (nr_peso_calc));
          // // //  ("2->" + VL_Movimento_Frete);
        }
        else if (tabelaFreteED.getDM_Tipo_Peso ().equals ("T")) {
          VL_Movimento_Frete = (tabelaFreteED.getVL_Frete () * (nr_peso_calc) / 1000);
        }
        else if (tabelaFreteED.getDM_Tipo_Peso ().equals ("C")) {
          VL_Movimento_Frete = (tabelaFreteED.getVL_Frete () * ed.getNR_Cubagem ());
        }
        else if (tabelaFreteED.getDM_Tipo_Peso ().equals ("E")) {
          VL_Movimento_Frete = tabelaFreteED.getVL_Outros2 () + (tabelaFreteED.getVL_Frete () * (ed.getNR_Peso_Tabela () - (tabelaFreteED.getNR_Peso_Inicial () - 1)));
        }else {
          VL_Movimento_Frete += tabelaFreteED.getVL_Outros2 ();
        }

        if (ed.getDM_Tipo_Conhecimento ().equals ("3") && tabelaFreteED.getPE_Devolucao () > 0) {
          VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Devolucao ()) / 100);
        }
        // // //  ("5->" + VL_Movimento_Frete);

        if (ed.getDM_Tipo_Conhecimento ().equals ("R") && tabelaFreteED.getPE_Refaturamento () > 0) {
          VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Refaturamento ()) / 100);
        }

        // // //  ("6->" + VL_Movimento_Frete);

        if (ed.getDM_Tipo_Conhecimento ().equals ("4") && tabelaFreteED.getPE_Reentrega () > 0) {
          VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Reentrega ()) / 100);
        }

        if (ed.getNR_Cubagem_Total () > 0 && ed.getNR_Cubagem_Total () > ed.getNR_Cubagem ()) {
          // // //  ("calculou p/cub total->");

          VL_Movimento_Frete = ( (VL_Movimento_Frete / ed.getNR_Cubagem_Total ()) * ed.getNR_Cubagem ());
        }

        // // //  ("7->" + VL_Movimento_Frete);

      }

      VL_Movimento_Frete-=vl_Descontar_Pedagio;

      ed.setCD_Tipo_Movimento (Tipo_Movimento);
      ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
      ed.setVL_Movimento (VL_Movimento_Frete);
      ed.setVL_Tarifa (tabelaFreteED.getVL_Frete ());
      vl_frete_total += VL_Movimento_Frete;
      vl_Frete_Peso = VL_Movimento_Frete;
      this.incluiMovimento (ed);

      ed.setVL_Tarifa (0);

      // // //  ("FRETE PESO / DM_ICMS->" + tabelaFreteED.getDM_ICMS ());

      }

    catch (SQLException exc) {
      throw new Excecoes (exc.getMessage () , exc , getClass ().getName () , "calculaFretePeso");
    }
  }

  protected void calculaFreteValor (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------AD VALOREM--------------------------------------------------

	  if (tabelaFreteED.getVL_Minimo_Nota_Fiscal () < ed.getVL_Nota_Fiscal_Calculo ()) {
      Tipo_Movimento = "AV";
      VL_Movimento_Frete = (ed.getVL_Nota_Fiscal_Calculo () * tabelaFreteED.getPE_Ad_Valorem () / 100);

      if (VL_Movimento_Frete < tabelaFreteED.getVL_Ad_Valorem_Minimo ()) {
        VL_Movimento_Frete = tabelaFreteED.getVL_Ad_Valorem_Minimo ();
      }
      if (ed.getDM_Tipo_Conhecimento ().equals ("3") && tabelaFreteED.getPE_Devolucao () > 0) {
        VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Devolucao ()) / 100);
      }
      if (ed.getDM_Tipo_Conhecimento ().equals ("R") && tabelaFreteED.getPE_Refaturamento () > 0) {
        VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Refaturamento ()) / 100);
      }

      if (ed.getDM_Tipo_Conhecimento ().equals ("4") && tabelaFreteED.getPE_Reentrega () > 0) {
        VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Reentrega ()) / 100);
      }
      ed.setCD_Tipo_Movimento (Tipo_Movimento);
      ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
      ed.setVL_Movimento (VL_Movimento_Frete);
      vl_frete_total += VL_Movimento_Frete;
      vl_Frete_Valor = VL_Movimento_Frete;
      this.incluiMovimento (ed);

    }

  }

  protected void calculaAdemeGris (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------ADEME/GRIS--------------------------------------------------

    Tipo_Movimento = "ADM";
    VL_Movimento_Frete = (ed.getVL_Nota_Fiscal_Calculo () * tabelaFreteED.getPE_Ademe () / 100);
    if (VL_Movimento_Frete < tabelaFreteED.getVL_Ademe_Minimo ()) {
      VL_Movimento_Frete = tabelaFreteED.getVL_Ademe_Minimo ();
    }
    if (ed.getDM_Tipo_Conhecimento ().equals ("3") && tabelaFreteED.getPE_Devolucao () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Devolucao ()) / 100);
    }
    if (ed.getDM_Tipo_Conhecimento ().equals ("R") && tabelaFreteED.getPE_Refaturamento () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Refaturamento ()) / 100);
    }
    if (ed.getDM_Tipo_Conhecimento ().equals ("4") && tabelaFreteED.getPE_Reentrega () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Reentrega ()) / 100);
    }

    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    vl_frete_total += VL_Movimento_Frete;
    this.incluiMovimento (ed);

  }

  protected void calculaTaxas (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------TAXAS-------------------------------------------------------

    Tipo_Movimento = "TX";
    VL_Movimento_Frete = tabelaFreteED.getVL_Taxas ();
    double nr_peso_calc = ed.getNR_Peso_Tabela ();

    //// // //  ("calculaTaxas ed.getNR_Peso_Minimo ()->" + ed.getNR_Peso_Minimo ());
    //// // //  ("calculaTaxas ed.getNR_Peso_Tabela ()->" + ed.getNR_Peso_Tabela ());
    //// // //  ("calculaTaxas ed.getDM_Tipo_Peso_Taxas ()->" + tabelaFreteED.getDM_Tipo_Peso_Taxas ());

    if (tabelaFreteED.getNR_Peso_Minimo () > ed.getNR_Peso_Tabela()) {
        nr_peso_calc = tabelaFreteED.getNR_Peso_Minimo ();
    }

    if ("K".equals(tabelaFreteED.getDM_Tipo_Peso_Taxas ())) {
        VL_Movimento_Frete = (tabelaFreteED.getVL_Taxas () * (nr_peso_calc));
        // // //  ("2->" + VL_Movimento_Frete);
    }
    if ("T".equals(tabelaFreteED.getDM_Tipo_Peso_Taxas ())) {
        VL_Movimento_Frete = (tabelaFreteED.getVL_Taxas () * (nr_peso_calc)/1000);
        // // //  ("2->" + VL_Movimento_Frete);
    }

    if (ed.getDM_Tipo_Conhecimento ().equals ("3") && tabelaFreteED.getPE_Devolucao () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Devolucao ()) / 100);
    }
    if (ed.getDM_Tipo_Conhecimento ().equals ("R") && tabelaFreteED.getPE_Refaturamento () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Refaturamento ()) / 100);
    }
    if (ed.getDM_Tipo_Conhecimento ().equals ("4") && tabelaFreteED.getPE_Reentrega () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Reentrega ()) / 100);
    }

    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    vl_frete_total += VL_Movimento_Frete;
    this.incluiMovimento (ed);

  }

  protected void calculaFreteMinimo (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------FRETE MINIMO------------------------------------------------------

    Tipo_Movimento = "FMI";
    if (vl_frete_total < tabelaFreteED.getVL_Frete_Minimo ()) {
      VL_Movimento_Frete = (tabelaFreteED.getVL_Frete_Minimo () - vl_frete_total);
    }
    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    this.incluiMovimento (ed);
  }

  protected void calculaAdicionalICMS (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
	    // -------------------- ADI -----------------------------------------------------

      // // //  (" ADI vl_frete_total->" + vl_frete_total);
      // // //  (" ADI vl_Frete_Peso->" + vl_Frete_Peso);

	      if ("A".equals (tabelaFreteED.getDM_ICMS ())) { //adicionar ADI adic ICMS no Frete Peso
	          Tipo_Movimento = "ADI";

	          //VL_Movimento_Frete = (vl_frete_total / 0.88) - vl_frete_total;
	          VL_Movimento_Frete = (vl_Frete_Peso / 0.88) - vl_Frete_Peso;
	          // // //  ("ADI->" + VL_Movimento_Frete);

	          ed.setCD_Tipo_Movimento (Tipo_Movimento);
	          ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
	          ed.setVL_Movimento (VL_Movimento_Frete);
	          vl_frete_total += VL_Movimento_Frete;
	          this.incluiMovimento (ed);
	      }
  }

  protected void calculaDespacho (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------DESPACHO----------------------------------------------------

    Tipo_Movimento = "DP";
    VL_Movimento_Frete = tabelaFreteED.getVL_Despacho ();
    if (ed.getDM_Tipo_Conhecimento ().equals ("3") && tabelaFreteED.getPE_Devolucao () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Devolucao ()) / 100);
    }
    if (ed.getDM_Tipo_Conhecimento ().equals ("R") && tabelaFreteED.getPE_Refaturamento () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Refaturamento ()) / 100);
    }
    if (ed.getDM_Tipo_Conhecimento ().equals ("4") && tabelaFreteED.getPE_Reentrega () > 0) {
      VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Reentrega ()) / 100);
    }

    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    vl_frete_total += VL_Movimento_Frete;
    this.incluiMovimento (ed);

  }

  protected void calculaPedagio (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------PEDAGIO-----------------------------------------------------

    Tipo_Movimento = "PED";
    VL_Movimento_Frete = tabelaFreteED.getVL_Pedagio ();

//// // ("Tipo:"+tabelaFreteED.getDM_Tipo_Pedagio ());
//// // ("VL:"+tabelaFreteED.getVL_Pedagio ());
    if (tabelaFreteED.getDM_Tipo_Pedagio ().equals ("K")) {
      VL_Movimento_Frete = (tabelaFreteED.getVL_Pedagio () * ed.getNR_Peso_Cubado ());
      if (tabelaFreteED.getNR_Peso_Minimo () > ed.getNR_Peso_Tabela()) {
          VL_Movimento_Frete = (tabelaFreteED.getVL_Pedagio () * ed.getNR_Peso_Minimo ());
      }
    }
    // // (VL_Movimento_Frete);

    if (ed.getNR_Cubagem_Total () > 0 && ed.getNR_Cubagem_Total () > ed.getNR_Cubagem ()) {
      VL_Movimento_Frete = ( (VL_Movimento_Frete / ed.getNR_Cubagem_Total ()) * ed.getNR_Cubagem ());
    }
    // // (VL_Movimento_Frete);

    if (tabelaFreteED.getDM_Tipo_Pedagio ().equals ("E")) { //por eixo
      int nr_eixos = this.buscaEixosVeiculo (ed);
      VL_Movimento_Frete = (tabelaFreteED.getVL_Pedagio () * nr_eixos);
    }
    // // (VL_Movimento_Frete);

    if (tabelaFreteED.getDM_Tipo_Pedagio ().equals ("F") ||
    	tabelaFreteED.getDM_Tipo_Pedagio ().equals ("X")) { //por kg/fracao
      double peso_pedagio = ed.getNR_Peso ();
      if (peso_pedagio < ed.getNR_Peso_Cubado ()) {
        peso_pedagio = ed.getNR_Peso_Cubado ();
      }
      if (tabelaFreteED.getNR_Peso_Minimo () > ed.getNR_Peso_Tabela()) {
    	peso_pedagio = tabelaFreteED.getNR_Peso_Minimo ();
      }

      VL_Movimento_Frete = (peso_pedagio/100) * tabelaFreteED.getVL_Pedagio ();
    }
    // // (VL_Movimento_Frete);

    if (tabelaFreteED.getDM_Tipo_Pedagio ().equals ("T")||
        tabelaFreteED.getDM_Tipo_Pedagio ().equals ("Y")) { //por T/fracao
        double peso_pedagio = ed.getNR_Peso ();
        if (peso_pedagio < ed.getNR_Peso_Cubado ()) {
          peso_pedagio = ed.getNR_Peso_Cubado ();
        }
        if (tabelaFreteED.getNR_Peso_Minimo () > ed.getNR_Peso_Tabela()) {
      	  peso_pedagio = tabelaFreteED.getNR_Peso_Minimo ();
        }
//// // ("Fracao:"+fracao);
        VL_Movimento_Frete = (peso_pedagio/1000) * tabelaFreteED.getVL_Pedagio ();
//// // ("Pedagio:"+VL_Movimento_Frete);
    }
    // // (VL_Movimento_Frete);

    if (ed.getDM_Tipo_Conhecimento ().equals ("3") && tabelaFreteED.getPE_Devolucao () > 0) {
        VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Devolucao ()) / 100);
    }
    // // (VL_Movimento_Frete);
    if (ed.getDM_Tipo_Conhecimento ().equals ("R") && tabelaFreteED.getPE_Refaturamento () > 0) {
        VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Refaturamento ()) / 100);
    }
    // // (VL_Movimento_Frete);
    if (ed.getDM_Tipo_Conhecimento ().equals ("4") && tabelaFreteED.getPE_Reentrega () > 0) {
        VL_Movimento_Frete = VL_Movimento_Frete * ( (100 - tabelaFreteED.getPE_Reentrega ()) / 100);
    }
    // // (VL_Movimento_Frete);

    if (tabelaFreteED.getDM_Tipo_Pedagio ().equals ("W")||
        tabelaFreteED.getDM_Tipo_Pedagio ().equals ("X")||
        tabelaFreteED.getDM_Tipo_Pedagio ().equals ("Y")) { //descontar pedagio do frete peso
        vl_Descontar_Pedagio=VL_Movimento_Frete;
    }

    if (tabelaFreteED.getVL_Pedagio_Minimo()>VL_Movimento_Frete) {
        VL_Movimento_Frete = tabelaFreteED.getVL_Pedagio_Minimo ();
    }
    // // (VL_Movimento_Frete);

    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    vl_frete_total += VL_Movimento_Frete;
    this.incluiMovimento (ed);

  }

  protected void calculaFreteCortesia (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------CORTESIA TIPO(2)--------------------------------------------
    Tipo_Movimento = "FP";
    VL_Movimento_Frete = parametro_FixoED.getVL_Frete_Cortesia ();
    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    this.incluiMovimento (ed);

  }

  protected void calculaSecCat (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------SEC/CAT-----------------------------------------------------
    Tipo_Movimento = "SEC";
    VL_Movimento_Frete = tabelaFreteED.getVL_Outros1 ();
    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    vl_frete_total += VL_Movimento_Frete;
    this.incluiMovimento (ed);

  }

  protected void calculaReembolso (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------REEMBOLSO-------------------------------------------------
    if ("7".equals (ed.getDM_Tipo_Conhecimento ())) {
      Tipo_Movimento = "REE";
      double peReembolso = 0;
      if (ed.getVL_Nota_Fiscal_Calculo () <= tabelaFreteED.getVL_Reembolso ()) {
        peReembolso = tabelaFreteED.getPE_Reembolso_Minimo ();
      }
      else {
        peReembolso = tabelaFreteED.getPE_Reembolso ();
      }
      VL_Movimento_Frete = ed.getVL_Nota_Fiscal_Calculo () * peReembolso / 100;
      ed.setCD_Tipo_Movimento (Tipo_Movimento);
      ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
      ed.setVL_Movimento (VL_Movimento_Frete);
      vl_frete_total += VL_Movimento_Frete;
      this.incluiMovimento (ed);
    }

  }

  protected void calculaCargaExpressa (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------CARGA EXPRESSA--------------------------------------------------
    Tipo_Movimento = "CE";

    if (ed.getPE_Carga_Expressa () > 0 && tabelaFreteED.getVL_Frete () > 0) {
      VL_Movimento_Frete = tabelaFreteED.getVL_Frete () * (ed.getPE_Carga_Expressa () / 100);
      ed.setCD_Tipo_Movimento (Tipo_Movimento);
      ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
      ed.setVL_Movimento (VL_Movimento_Frete);
      vl_frete_total += VL_Movimento_Frete;
      this.incluiMovimento (ed);
    }

  }

  protected int buscaEixosVeiculo (Calcula_FreteED ed) throws Excecoes {
    int nr_eixos = 0;
    ResultSet rs2 = null;
    try {

      sql = " SELECT complementos_veiculos.NR_Eixos, complementos_veiculos.oid_Veiculo " +
          "  FROM Conhecimentos, complementos_veiculos " +
          "  WHERE Conhecimentos.oid_Veiculo = complementos_veiculos.oid_Veiculo " +
          "  AND   Conhecimentos.oid_Conhecimento = '" + ed.getOID_Conhecimento () + "'";
      // // //  ("PEDAGIO POR PESO " + sql);

      rs = this.executasql.executarConsulta (sql);
      if (rs.next ()) {
        nr_eixos = rs.getInt ("NR_Eixos");
        // // //  ("achoi veicu PEDAGIO POR PESO nr_eixos->" + nr_eixos);
      }

      sql = " SELECT complementos_veiculos.NR_Eixos, complementos_veiculos.oid_Veiculo " +
          "  FROM Conhecimentos, complementos_veiculos " +
          "  WHERE Conhecimentos.oid_carreta = complementos_veiculos.oid_Veiculo " +
          "  AND   Conhecimentos.oid_Conhecimento = '" + ed.getOID_Conhecimento () + "'";
      // // //  ("PEDAGIO POR PESO " + sql);

      rs = this.executasql.executarConsulta (sql);
      if (rs.next ()) {
        nr_eixos += rs.getInt ("NR_Eixos");
        // // //  ("achoi veicu PEDAGIO POR PESO nr_eixos->" + nr_eixos);
      }

      sql = " SELECT complementos_veiculos.NR_Eixos, complementos_veiculos.oid_Veiculo " +
          "  FROM Conhecimentos, complementos_veiculos " +
          "  WHERE Conhecimentos.oid_carreta2 = complementos_veiculos.oid_Veiculo " +
          "  AND   Conhecimentos.oid_Conhecimento = '" + ed.getOID_Conhecimento () + "'";
      // // //  ("PEDAGIO POR PESO " + sql);

      rs = this.executasql.executarConsulta (sql);
      if (rs.next ()) {
        nr_eixos += rs.getInt ("NR_Eixos");
        // // //  ("achoi veicu PEDAGIO POR PESO nr_eixos->" + nr_eixos);
      }

    }

    catch (SQLException exc) {
      throw new Excecoes (exc.getMessage () , exc , getClass ().getName () , "buscaEixosVeiculo");
    }

    // // //  (" nr_eixos->" + nr_eixos);
    return nr_eixos;
  }

  protected int buscaEixosConjuntoVeiculo (Calcula_FreteED ed) throws Excecoes {
    int nr_eixos = 0;
    ResultSet rs2 = null;
    try {

      sql = " SELECT complementos_veiculos.NR_Eixos, complementos_veiculos.oid_Veiculo " +
          "  FROM Conhecimentos, complementos_veiculos " +
          "  WHERE Conhecimentos.oid_Veiculo = complementos_veiculos.oid_Veiculo " +
          "  AND   Conhecimentos.oid_Conhecimento = '" + ed.getOID_Conhecimento () + "'";
      // // //  ("PEDAGIO POR PESO " + sql);

      rs = this.executasql.executarConsulta (sql);
      if (rs.next ()) {
        nr_eixos = rs.getInt ("NR_Eixos");
        // // //  ("achoi veicu PEDAGIO POR PESO nr_eixos->" + nr_eixos);

        sql = " SELECT NR_Eixos " +
            "  FROM  complementos_veiculos, Conjuntos_Veiculos " +
            "  WHERE complementos_veiculos.oid_Veiculo = Conjuntos_Veiculos.placa_carreta " +
            "  AND   Conjuntos_Veiculos.oid_Veiculo = '" + rs.getString ("oid_Veiculo") + "'";

        // // //  ("verif carreta 1PEDAGIO POR PESO nr_eixos->" + sql);

        rs2 = this.executasql.executarConsulta (sql);
        if (rs2.next ()) {
          nr_eixos += rs2.getInt ("NR_Eixos");
        }

        sql = " SELECT NR_Eixos " +
            "  FROM  complementos_veiculos, Conjuntos_Veiculos " +
            "  WHERE complementos_veiculos.oid_Veiculo = Conjuntos_Veiculos.placa_carreta2 " +
            "  AND   Conjuntos_Veiculos.oid_Veiculo = '" + rs.getString ("oid_Veiculo") + "'";

        // // //  ("verif carreta 1PEDAGIO POR PESO nr_eixos->" + sql);

        rs2 = this.executasql.executarConsulta (sql);
        if (rs2.next ()) {
          nr_eixos += rs2.getInt ("NR_Eixos");
        }

        sql = " SELECT NR_Eixos " +
            "  FROM  complementos_veiculos, Conjuntos_Veiculos " +
            "  WHERE complementos_veiculos.oid_Veiculo = Conjuntos_Veiculos.placa_dolly " +
            "  AND   Conjuntos_Veiculos.oid_Veiculo = '" + rs.getString ("oid_Veiculo") + "'";

        // // //  ("verif carreta 1PEDAGIO POR PESO nr_eixos->" + sql);

        rs2 = this.executasql.executarConsulta (sql);
        if (rs2.next ()) {
          nr_eixos += rs2.getInt ("NR_Eixos");
        }
      }
    }

    catch (SQLException exc) {
      throw new Excecoes (exc.getMessage () , exc , getClass ().getName () , "buscaEixosVeiculo");
    }

    // // //  (" nr_eixos->" + nr_eixos);
    return nr_eixos;
  }

}
